package com.gxar.quick.ar.server.db.mapper;

import com.gxar.quick.ar.server.db.model.UserWorksEntity;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2023/11/3 11:14
 */
@Mapper
public interface UserWorksMapper {


    /**
     * 根据作品和来源查询用户作品
     *
     * @param userId  用户id
     * @param worksId 作品id
     * @param source  来源
     * @return 用户作品
     */
    UserWorksEntity queryByWorksAndSource(Long userId, Long worksId, Integer source);

    /**
     * 根据作品和来源查询用户作品
     *
     * @param userId  用户id
     * @param worksId 作品id
     * @param type    类型
     * @param source  来源
     * @return 用户作品
     */
    List<UserWorksEntity> queryByWorksAndSources(Long userId, Long worksId, Integer type, List<Integer> source);

    /**
     * 新增用户作品关系
     *
     * @param worksId   作品id
     * @param userId    用户id
     * @param type      类型
     * @param source    来源
     * @param createdAt 创建时间
     * @param creator   创建人
     * @param updatedAt 更新时间
     * @return 数量
     */
    Integer insert(Long worksId, Long userId, Integer type, Integer source, Date createdAt, String creator, Date updatedAt);

    /**
     * 删除用户作品关系
     *
     * @param id id
     */
    void deleteById(Long id);

    /**
     * 根据作品、类型和来源查询用户作品
     *
     * @param worksId 作品id
     * @param userId  用户id
     * @param source  来源
     * @param type    类型
     * @return 用户作品
     */
    UserWorksEntity queryByWorksAndTypeAndSource(Long worksId, Long userId, Integer source, Integer type);

    /**
     * 删除用户作品
     *
     * @param workIds 作品id集合
     */
    void deleteByWorksId(List<Long> workIds);

    /**
     * 根据作品id查询
     *
     * @param workId 作品id
     * @param type   类型
     * @return 用户作品
     */
    List<UserWorksEntity> queryByWorkId(Long workId, Integer type);

    /**
     * 删除作品指定类型的用户关系
     *
     * @param worksIdList 作品id集合
     * @param type        类型
     */
    void deleteByTypeWorks(List<Long> worksIdList, Integer type);

    /**
     * 删除作品指定来源的用户关系
     *
     * @param workIdList 作品id
     * @param type       类型
     * @param source     来源
     */
    void deleteBySourceWorks(List<Long> workIdList, Integer type, Integer source);

    /**
     * 删除用户指定类型作品的关系
     *
     * @param userId  用户id
     * @param worksId 作品id
     * @param type    关联类型
     */
    void deleteUserWorksByType(Long userId, Long worksId, Integer type);

    /**
     * 查询用户作品
     *
     * @param worksId 作品id集合
     * @param userId  用户id
     * @param source  来源
     * @param type    类型
     * @return 响应
     */
    List<UserWorksEntity> queryByInWorksAndTypeAndSource(List<Long> worksId, Long userId, Integer source, Integer type);

    /**
     * 批量保存
     *
     * @param userWorksEntityList 集合
     * @return 数量
     */
    Integer saveAll(List<UserWorksEntity> userWorksEntityList);
}
